package com.cctc.lifecycle;/**
 * @Description: 生命周期回调
 * [ Bean 实例生命周期回调 -> Bean 实例初始化和销毁回调 ]
 * 执行时机:
 *   初始化回调: Bean 实例被创建和装配（初始化）时由 IoC 容器调用。
 *   销毁回调: Bean 实例被销毁时由 IoC 容器调用。
 * 实现方式:
 *   1) 注解: 在 Bean 方法上标注 @PostConstruct 和 @PreDestory 注解;
 *   2) Java 代码: 实现 InitializingBean 和 DisposableBean 回调接口;
 *   3） Xml 配置: 指定 init() 和 destory() 方法;
 *   说明: 以上实现方式和实际调用顺序保持一致。
 *   补充说明: JSR-250 的 @PostConstruct 和 @PreDestroy 注解通常被认为是在现代 Spring 应用程序中接收生命周期回调的最佳实践。
 * [ IoC 容器生命周期回调 -> IoC 容器启动、关闭、上下文刷新&关闭等回调 ]
 * 执行时机:
 *   当 IoC 容器本身收到启动、关闭、上下文刷新&关闭等信号时（例如: 在 IoC 容器运行时的停止/重启场景）由 IoC 容器调用。
 * 实现方式:
 *   |- Lifecycle 接口（定义了任何有自己的生命周期要求的 Bean 实例的基本方法（如启动和停止一些后台进程））
 *      |- SmartLifecycle 接口（同时集成了 Phase 接口，获取 Bean 实例启动和关闭调用的顺序）
 *      |- LifecycleProcessor 接口（覆盖默认的生命周期处理器实例）
 *         |- DefaultLifecycleProcessor 实现类（默认生命周期处理器实例，修改启动、关闭等阶段的默认超时时间[30s]）
 *      |- ConfigurableApplicationContext.registerShutdownHook() 方法（确保优雅地关闭 IoC 容器，包括显式调用 Singleton Bean 上相关的销毁回调方法，释放所有资源。）
 * @Author: lichao
 * @Email: li2chao@126.com
 * @Date: 2024-01-15 08:51:24
 **/